﻿var estadoInicial = new Kiwi.State('EstadoInicial');

estadoInicial.create = function () {
    Kiwi.State.prototype.create.call(this);
    this.background = new Kiwi.GameObjects.StaticImage(this, this.textures['Fondo'], 0, 0);
    this.Tanque = new Kiwi.GameObjects.Sprite(this, this.textures.TanqueSprite, 100, 100);
    this.CabezaTanque = new Kiwi.GameObjects.Sprite(this, this.textures.CabezaTanqueSprite, 100, 100);

    this.acelerarKey = this.game.input.keyboard.addKey(Kiwi.Input.Keycodes.W);
    this.girarIzquierdaKey = this.game.input.keyboard.addKey(Kiwi.Input.Keycodes.A);
    this.girarDerechaKey = this.game.input.keyboard.addKey(Kiwi.Input.Keycodes.D);
    this.desacelerarKey = this.game.input.keyboard.addKey(Kiwi.Input.Keycodes.S);
    this.fireKey = this.game.input.keyboard.addKey(Kiwi.Input.Keycodes.SPACEBAR);
    this.girarIzquierdaCabezaKey = this.game.input.keyboard.addKey(Kiwi.Input.Keycodes.Q);
    this.girarDerechaCabezaKey = this.game.input.keyboard.addKey(Kiwi.Input.Keycodes.E);

    this.CabezaTanque.animation.add('disparando', [0, 1, 2, 3, 4, 5, 6, 7], 0.1, false);
    this.Tanque.transform.rotPointX = 100;
    this.Tanque.transform.rotPointY = 75;
    this.Tanque.Velocidad = 0.1;
    this.Tanque.AvanzaAdelante = true;
    this.CabezaTanque.transform.rotPointX = 100;
    this.CabezaTanque.transform.rotPointY = 75;
    this.CabezaTanque.ObjetivoX = null;
    this.CabezaTanque.ObjetivoY = null;

    this.addChild(this.background);
    this.addChild(this.Tanque);
    this.addChild(this.CabezaTanque);
    this.Tanque.rotation = 0;
};

estadoInicial.girar = function () {
    var puntoObjetivo = new Kiwi.Geom.Point(this.CabezaTanque.ObjetivoX, this.CabezaTanque.ObjetivoY);
    var puntoCabezaTanque = new Kiwi.Geom.Point(this.CabezaTanque.x, this.CabezaTanque.y);
    var totalRotation = puntoCabezaTanque.angleTo(puntoObjetivo);
    var haciaIzquierda = false;

    if (this.CabezaTanque.rotation < totalRotation) {
        this.CabezaTanque.rotation += 0.02;
        haciaIzquierda = true;
    }
    else
        this.CabezaTanque.rotation -= 0.02;

    if (haciaIzquierda && this.CabezaTanque.rotation >= totalRotation) {
        debugger;
        this.CabezaTanque.ObjetivoX = null;
    }
    else if (!haciaIzquierda && this.CabezaTanque.rotation <= totalRotation)
        this.CabezaTanque.ObjetivoX = null;
};

estadoInicial.update = function () {
    Kiwi.State.prototype.update.call(this);
    var grados = Kiwi.Utils.GameMath.radiansToDegrees(this.Tanque.rotation);
    var tangenteEsPendiente = Math.tan(this.Tanque.rotation);
    var motoreando = false;

    if (this.girarDerechaKey.isDown) {
        if (this.Tanque.Velocidad > 0) {
            var paraGirar = this.Tanque.Velocidad / 2;
            this.Tanque.rotation += Kiwi.Utils.GameMath.degreesToRadians(paraGirar);
            this.CabezaTanque.rotation += Kiwi.Utils.GameMath.degreesToRadians(paraGirar);
        }
    }
    if (this.girarIzquierdaKey.isDown) {
        if (this.Tanque.Velocidad > 0) {
            var paraGirar = this.Tanque.Velocidad / 2;
            this.Tanque.rotation -= Kiwi.Utils.GameMath.degreesToRadians(paraGirar);
            this.CabezaTanque.rotation -= Kiwi.Utils.GameMath.degreesToRadians(paraGirar);
        }
    }
    if (this.girarIzquierdaCabezaKey.isDown) {
        this.CabezaTanque.rotation -= 0.02;
    }
    if (this.girarDerechaCabezaKey.isDown) {
        this.CabezaTanque.rotation += 0.02;
    }

    if (this.desacelerarKey.isDown) {
        motoreando = true;

        if (this.Tanque.AvanzaAdelante && this.Tanque.Velocidad > 0) {
            this.Tanque.Velocidad -= 0.05;
            desplazarse(this.Tanque, this.CabezaTanque, false);
        }
        else {
            this.Tanque.AvanzaAdelante = false;
            desplazarse(this.Tanque, this.CabezaTanque, true);
        }
    }
    if (this.acelerarKey.isDown) {
        motoreando = true;

        if (!this.Tanque.AvanzaAdelante && this.Tanque.Velocidad > 0) {
            this.Tanque.Velocidad -= 0.05;
            desplazarse(this.Tanque, this.CabezaTanque, false);
        }
        else {
            this.Tanque.AvanzaAdelante = true;
            desplazarse(this.Tanque, this.CabezaTanque, true);
        }
    }

    if (this.game.input.mouse.isDown) {
        var mousePoint = new Kiwi.Geom.Point(this.game.input.mouse.x, this.game.input.mouse.y);
        //        var puntoCabezaTanque = new Kiwi.Geom.Point(this.CabezaTanque.x, this.CabezaTanque.y);
        //        this.CabezaTanque.rotation = puntoCabezaTanque.angleTo(mousePoint);
        this.CabezaTanque.ObjetivoX = mousePoint.x;
        this.CabezaTanque.ObjetivoY = mousePoint.y;
    }

    if (!motoreando) {
        if (this.Tanque.Velocidad > 0)
            desplazarse(this.Tanque, this.CabezaTanque, false);
    }

    if (this.CabezaTanque.ObjetivoX != null)
        this.girar();

    document.getElementById("cabezaX").value = this.CabezaTanque.x;
    document.getElementById("cabezaY").value = this.CabezaTanque.y;
    document.getElementById("mouseX").value = this.game.input.mouse.x;
    document.getElementById("mouseY").value = this.game.input.mouse.y;

    if (Math.abs(grados) >= 359) {
        this.Tanque.rotation = 0;
        this.CabezaTanque.rotation = 0;
    }
};

function desplazarse(Tanque, CabezaTanque, acelerar) {
    if (acelerar) {
        if (Tanque.Velocidad < 4)
            Tanque.Velocidad += 0.02;
    }
    else {
        if (Tanque.Velocidad > 0) {
            Tanque.Velocidad -= 0.03;
        }
    }

    if (Tanque.AvanzaAdelante) {
        Tanque.x += Tanque.Velocidad * Math.cos(Tanque.rotation);
        Tanque.y += Tanque.Velocidad * Math.sin(Tanque.rotation);
    }
    else {
        Tanque.x -= Tanque.Velocidad * Math.cos(Tanque.rotation);
        Tanque.y -= Tanque.Velocidad * Math.sin(Tanque.rotation);
    }

    CabezaTanque.x = Tanque.x;
    CabezaTanque.y = Tanque.y;
}
